package network

import (
	"fmt"
	"net"
	"strings"
)

// GetLocalIPs 获取本机所有可用IP地址
func GetLocalIPs() []string {
	var ips []string
	ifaces, err := net.Interfaces()
	if err != nil {
		return ips
	}

	for _, iface := range ifaces {
		// 跳过禁用的接口
		if iface.Flags&net.FlagUp == 0 {
			continue
		}
		// 跳过回环接口
		if iface.Flags&net.FlagLoopback != 0 {
			continue
		}
		// 跳过虚拟接口（通常以 v 开头）
		if strings.HasPrefix(iface.Name, "v") {
			continue
		}

		addrs, err := iface.Addrs()
		if err != nil {
			continue
		}

		for _, addr := range addrs {
			switch v := addr.(type) {
			case *net.IPNet:
				// 只获取IPv4地址
				if ip4 := v.IP.To4(); ip4 != nil {
					// 跳过docker和虚拟机的网桥
					if !strings.HasPrefix(ip4.String(), "172.") &&
						!strings.HasPrefix(ip4.String(), "10.") &&
						!strings.HasPrefix(ip4.String(), "169.254.") {
						ips = append(ips, fmt.Sprintf("%s (%s)", ip4.String(), iface.Name))
					}
				}
			}
		}
	}
	return ips
}
